main() {
  // 构造函数的作用：创建对象，初始化属性，返回对象

  // 调用主构造函数
  Person p = new Person(name: '张三', age: 18, sex: '男');
  p.sayHello(); // 调用方法

  // 调用命名构造函数
  Person p1 = new Person.male(name: '李四', age: 19);
  p1.sayHello();
}

// 类的基础用法
class Person {
  // 属性(相当于定义变量)
  String? name;
  int? age;
  String? sex;

  // 构造函数(主)，跟类名同名
  // Person({String? name, int? age, String? sex}) {
  //   print('主构造函数被调用了');
  //   this.name = name;
  //   this.age = age;
  //   this.sex = sex;
  // }

  // 命名构造函数(次)，可以有多个
  // Person.male({String? name, int? age}) {
  //   print('命名构造函数被调用了');
  //   this.name = name;
  //   this.age = age;
  //   this.sex = '男';
  // }

  // 构造函数的简写
  Person({this.name, this.age, this.sex});

  // 构造函数的简写，: 后面的也可以做属性的初始化
  Person.male({this.name, this.age}) : this.sex = '男';

  // 方法(相当于定义函数)
  void sayHello() {
    print('你好，我是$name，我今年$age岁，我是$sex');
  }
}
